package aphorism;

import java.awt.Color;
import java.util.Random;

/**
 * Datenklasse fuer die Speicherung eines Farbitems.
 * <br>
 * Beinhaltet den Namen und den Farbwert der Farbe. Ferner kann eine Farbe als zufaellig deklariert werden.
 * <br>
 * Kann direkt als ComboBoxItem benutzt werden.
 *
 * @author Patrick Bauer
 * @version 1.0
 */
public class ColorItem {
    /**
     * Name der Farbe.
     */
    private String name;

    /**
     * Farbcode der Farbe.
     */
    private Color color;

    /**
     * Wert der eine Farbe als zufaellig deklariert.
     */
    private Boolean random = false;
    

    /**
     * Setzt den Namen der Farbe und deklariert diese als zufaellig.
     * @param name der Name der Farbe
     */
    public ColorItem(String name) {
        this.name = name;
        this.setRandom(true);
    }

    /**
     * Setzt den Name und den Farbcode der Farbe.
     *
     * @param name der Name der Farbe
     * @param color der Farbcode der Farbe
     */
    public ColorItem(String name, Color color) {
        this.name = name;
        this.color = color;
    }

    /*
     * Hilfsmethode zur Anzeige des Objektes in Komponenten wie der JComboBox.
     */
    @Override
    public String toString() {
        return this.getName();
    }
    
    /**
     * Liefert den Namen der Farbe.
     *
     * @return der Name der Farbe
     */
    public String getName() {
        return name;
    }

    /**
     * Setzt den Namen der Farbe.
     *
     * @param name der zu setzende Name
     */
    public void setName(String name) {
        this.name = name;
    }

    /**
     * Liefert den Farbcode der Farbe.
     * Ist eine Farbe als zufeallig markiert, dann wird eine Farbe aus zufealligen R,G und B Werten generiert.
     *
     * @return der Farbcode des Objektes
     */
    public Color getColor() {
        Color returnColor;
        
        if(this.isRandom()){
            returnColor = this.color;
        } else {
            Random random = new Random();
            returnColor = new Color(random.nextInt(256), random.nextInt(256), random.nextInt(256));
        }
        
        return returnColor;
    }

    /**
     * Setzt den Farbcode der Farbe.
     *
     * @param color der zu setzende Farbcode
     */
    public void setColor(Color color) {
        this.color = color;
    }

    /**
     * Deklariert die Farbe als zufeallig bzw nicht zufeallig.
     *
     * @param isRandom ob die Farbe zufeallig generiert werden soll
     */
    private void setRandom(boolean isRandom) {
        this.random = isRandom;
    }

    /**
     * Liefert den Wert ob die Farbe zufeallig oder nicht zufeallig ist.
     *
     * @return der Wert ob die Farbe zuefallig oder nicht zufaellig ist
     */
    private Boolean isRandom() {
        return this.random;
    }


}
